package com.bestcem.xm.om.dao;

import com.bestcem.xm.om.entity.OmUser;

import java.util.Collection;
import java.util.List;

/**
 * @author zq.ding <zq.ding@idiaoyan.com>
 * @version v1.0
 * @date 2021/12/27 14:28
 */
public interface OmUserDao {
    /**
     * 根据id查找对应的OmUser
     *
     * @param id 唯一id
     * @return 实体类
     */
    OmUser findById(String id);

    /**
     * 根据id删除对应的OmUser
     *
     * @param id 唯一id
     * @return 实体类
     */
    void deleteById(String id);

    /**
     * 查找OmUser列表
     *
     * @param page 当前页
     * @param size 页面大小
     * @return OmUser列表
     */
    List<OmUser> listAll(Integer page, Integer size);

    /**
     * 批量保存OmUser列表
     *
     * @param omUsers
     */
    void save(List<OmUser> omUsers);

    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return com.bestcem.xm.om.entity.mongo.OmUser
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/29 18:21
     */
    OmUser findByUsername(String username);

    /**
     * 根据id和状态查找用户
     *
     * @param userId
     * @param status
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 15:51
     */
    OmUser findByIdAndStatus(String userId, int status);

    /**
     * 根据用户id列表和状态查询用户
     *
     * @param userIds
     * @param status
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/29 16:44
     */
    List<OmUser> listByIdsAndStatus(List<String> userIds, Integer status);

    /**
     * 根据omuser中封装条件查询列表
     *
     * @param omUser
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/30 15:10
     */
    List<OmUser> findByCondition(OmUser omUser);

    /**
     * 查询数量
     * @param search
     * @param roleId
     * @param status
     * @return
     */
    Long count(String search, String roleId, Integer status);

    /**
     * 分页查询
     * @param page
     * @param rowsPerPage
     * @param search
     * @param roleId
     * @param status
     * @return
     */
    List<OmUser> pageUser(Integer page, Integer rowsPerPage, String search, String roleId, Integer status);

    /**
     * 根据username，phone或者email是否已经存在
     *
     * @param username
     * @param phone
     * @param email
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/31 17:23
     */
    List<OmUser> findByUsernameOrPhoneOrEmail(String username, String phone, String email);

    /**
     * 插入用户
     *
     * @param user
     * @return
     * @auther xuan.yang@idiaoyan.com
     * @date 2021/12/31 17:33
     */
    OmUser insertUser(OmUser user);

    /**
     * 批量插入用户
     *
     * @param omUsers
     * @return
     */
    void insertBatch(List<OmUser> omUsers);

    /**
     * 根据id更新用户
     * @param omUser
     * @return
     */
    long updateById(OmUser omUser);

    /**
     * 根据相应的roleid找到对应的OmUser
     *
     * @param id 唯一id
     * @return 实体类
     */
    OmUser findByRoleId(String id);

    /**
     * roleIds
     * @param roleIds
     * @return
     */
    List<OmUser> listByRoleId(List<String> roleIds);

    /**
     * 根据id列表查询
     *
     * @param supporterIdList
     * @return java.util.List<com.bestcem.xm.om.entity.OmUser>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2022/3/22 15:50
     */
    List<OmUser> findByIds(Collection<String> supporterIdList);

    /**
     * 根据用户名模糊查询用户列表
     * @param userName
     * @return
     */
    List<OmUser> listByUsername(String userName);

    /**
     * 通过
     * @param realNamePattern
     * @param roleIds
     * @param offset
     * @param size
     * @return
     */
    List<OmUser> listByRealNameAndRoleIds(String realNamePattern, List<String> roleIds, Integer offset, Integer size);
}
